package com.wang.tool.monitor.aop;

import com.wang.tool.monitor.weaver.MonitorWeaver;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 监控标记
 *
 * @Author wangshaopeng
 * @Date 2022/5/10
 * @see MonitorAdvice#monitorAround
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Monitor {

    /**
     * 分组
     * 纯自定义
     */
    String group() default "";

    /**
     * 双码-业务码
     * 不填使用类名
     *
     * @return
     */
    String biz() default "";

    /**
     * 双码-动作码
     * 不填使用方法名
     *
     * @return
     */
    String action() default "";


    /**
     * 监控编织器
     * =AnnotationWeaver时代表为空
     *
     * @see MonitorWeaver
     * @see MonitorAdvice#monitorAround
     */
    Class<? extends AnnotationWeaver> weaver() default AnnotationWeaver.class;


    /**
     * 监控编织器配置,有监控编织器时有效
     * 很多时候我们可以抽取一些公用的编织器,但是大家又不是完全一样
     * 例如我想在超时时记录入参,他可能需要在异常时记录入参
     * 那么通过这个config和weaver的结合,防止weaver膨胀
     * 注意：不要太过通用,注意性能
     * 每个元素形似
     * key=val
     * AnnotationWeaver 拿到的是Map<String,String>
     *
     * @see Monitor#weaver
     */
    String[] weaverConfig() default {};

    /**
     * 输出入参
     * @return
     */
    boolean printParam() default false;

    /**
     * 输出结果
     * @return
     */
    boolean printResult() default false;

}
